// Book类（图书类）
class Book {
    public title: string;        // 公共属性：书名
    private _author: string;     // 私有属性：作者（只能类内部访问）
    protected category: string;  // 受保护属性：分类（类及子类可访问）

    constructor(title: string, author: string, category: string) {
        this.title = title;
        this._author = author;
        this.category = category;
    }

    // getter / setter 封装私有属性
    set authorName(value: string) {
        this._author = value;
    }

    get authorName() {
        return this._author;
    }

    // 公共方法：显示图书信息
    public getInfo(): void {
        console.log(`书名: ${this.title}, 作者: ${this._author}, 分类: ${this.category}`);
    }
}


const ts_book = new Book("《TypeScript入门》", "李四", "技术");
ts_book.authorName="王五"
ts_book.getInfo()


// LibraryBook类（馆藏图书类，继承自Book类）
// class LibraryBook extends Book {
//     public isbn: string;      // 公共属性：ISBN
//     private _location: string; // 私有属性：存放位置
//
//     // 子类构造函数
//     constructor(
//         title: string,
//         author: string,
//         category: string,
//         isbn: string,
//         location: string
//     ) {
//         // 调用父类构造函数初始化父类成员
//         super(title, author, category);
//
//         // 初始化子类特有成员
//         this.isbn = isbn;
//         this._location = location;
//     }
//
//     // 重写父类方法（多态）
//     public override getInfo(): void {
//         console.log(
//             `书名: ${this.title}, 作者: ${this.author}, 分类: ${this.category}, ISBN: ${this.isbn}, 位置: ${this._location}`
//         );
//     }
//
//     // 借阅方法
//     public borrow(): void {
//         console.log(`图书《${this.title}》已被借阅，存放位置: ${this._location}`);
//     }
//
//     // 封装：通过方法访问私有属性 location
//     public getLocation(): string {
//         return this._location;
//     }
// }
//
// // ====================== 使用示例 ======================
// const book = new Book("TypeScript入门", "张三", "技术");
// book.getInfo(); // 输出：书名: TypeScript入门, 作者: 张三, 分类: 技术
//
// const libraryBook = new LibraryBook(
//     "JavaScript高级程序设计",
//     "Nicholas C. Zakas",
//     "技术",
//     "978-7-115-47059-9",
//     "A区3架"
// );
// libraryBook.getInfo();   // 输出重写后的信息
